package com.winshare.saleAssistant.dao;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.winshare.saleAssistant.domain.dto.req.DataAnalysisQueryDTO;
import com.winshare.saleAssistant.domain.dto.req.UserQueryDTO;
import com.winshare.saleAssistant.domain.query.StaffQuery;
import com.winshare.saleAssistant.model.Sale;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 销售数据 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2020-11-11
 */
public interface SaleMapper extends BaseMapper<Sale> {
    List<Sale> selectList1();

    List<Sale> selectSaleByCondition(UserQueryDTO userQueryDTO);

    int querySaleCount(UserQueryDTO userQueryDTO);

    String getSell(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName);

    Integer getPSellCount(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName);

    List<Map<String, Object>> getSaleTotal(String sjType);

    List<Map<String, Object>> getSaleProduct(@Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getSaleArea(@Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Sale> getSales(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName);

    List<Sale> getLuxuryTotalMoney(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Sale> getTrialTotalMoney(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Sale> getBasisTotalMoney(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);


    List<Sale> getrankingTotal(@Param("areaName") String areaName, @Param("parentAreaName") String parentAreaName, @Param("cityName") String cityName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Sale> getrankingMoney(@Param("areaName") String areaName, @Param("parentAreaName") String parentAreaName, @Param("cityName") String cityName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getAreaSaleRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    Integer getProductTotal(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    Integer getTeacherTotal(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    Integer getStudentTotal(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);


    Integer getSchoolTotal();

    Integer getCitySchoolTotal(@Param("cityName") String cityName);

    List<Sale> getRateOfCoverage(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);


    List<Sale> getLoginTotal(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Sale> getLogin(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Sale> getProductEmploy(@Param("parentAreaName") String parentAreaName, @Param("productName") String productName,@Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getExportSale(@Param("page") Page<Map<String, Object>> page);

    /**
     * 自主销售产品销售概况-周
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getSaleTotalWeek(@Param("product_id") Integer product_id);

    /**
     * 自主销售产品销售概况-月
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getSaleTotalMonth(@Param("product_id") Integer product_id);

    /**
     * 自主销售产品销售概况-年
     *
     * @param product_id
     * @return
     */
    List<Map<String, Object>> getSaleTotalYear(@Param("product_id") Integer product_id);

    /**
     * 登录概况-周
     * @param product_id
     * @return
     */
    List<Map<String,Object>> getLoginTotalWeek(@Param("product_id") Integer product_id);
    /**
     * 登录概况-月
     * @param product_id
     * @return
     */
    List<Map<String,Object>> getLoginTotalMonth(@Param("product_id") Integer product_id);
    /**
     * 登录概况-年
     * @param product_id
     * @return
     */
    List<Map<String,Object>> getLoginTotalYear(@Param("product_id") Integer product_id);

    /**
     * 获取导出列表
     *
     * @param areaName
     * @return
     */
    List<Map<String, Object>> getExportList(@Param("areaName") String areaName);


    void deleteBySchoolCode(@Param("schoolCode") String schoolCode);

    void deleteByUuid(@Param("id") String id);

    /**
     * 区域情况统计
     *
     * @param productName
     * @param starTime
     * @param endTime
     * @return
     */
    Map<String, Object> getRegionalSituation(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 各时段登陆次数
     *
     * @param productName
     * @param starTime
     * @param endTime
     * @return
     */
    List<Map<String, Object>> getLoginTime(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 学校使用排名
     *
     * @param areaName    区域
     * @param productName 产品名称
     * @param starTime    开始时间
     * @param endTime     结束时间
     * @param orderBy     排序方式 activationRate 激活率 loginNum登录次数 useTime使用时长
     * @return
     */
    List<Map<String, Object>> getSchoolUseList(@Param("orderBy") String orderBy, @Param("areaName") String areaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 用户使用排名
     *
     * @param areaName    区域
     * @param productName 产品名称
     * @param starTime    开始时间
     * @param endTime     结束时间
     * @param orderBy     排序方式 activationRate 激活率 loginNum登录次数 useTime使用时长
     * @return
     */
    List<Map<String, Object>> getUserUseList(@Param("orderBy") String orderBy, @Param("areaName") String areaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    /**
     * 功能使用排名
     *
     * @param areaName    区域
     * @param productName 产品名称
     * @param starTime    开始时间
     * @param endTime     结束时间
     * @param orderBy     排序方式 activationRate 激活率 loginNum登录次数 useTime使用时长
     * @return
     */
    List<Map<String, Object>> getFunUseList(@Param("orderBy") String orderBy, @Param("areaName") String areaName, @Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getSaleCMStatistical(@Param("productName") String productName, @Param("starTime") Date starTime, @Param("endTime") Date endTime);

    List<Map<String, Object>> getUserSchoolUseList(@Param("schoolId") Integer schoolId);
}
